package com.bolt.common.io;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 目录操作
 */
public class DirectoryUtil {
    /**
     * 通过local（）方法 ，可以得到有给定目录文件结构下，符合正则匹配的所有文件组成的 文件对象数组，
     *
     * @param dir   目录文件对象
     * @param regex 正则表达式
     * @return 文件对象数组
     */
    public static File[] local(File dir, final String regex) {
        //listFiles方法根据指定文件名的筛选器，返回一个File文件对象数组。
        return dir.listFiles(new FilenameFilter() {
            private Pattern pattern = Pattern.compile(regex);

            @Override
            public boolean accept(File dir, String name) {
                return pattern.matcher(name).matches();
            }
        });
    }

    public static File[] local(String path, final String regex) {
        return local(new File(path), regex);
    }

    /**
     * 遍历匹配的文件目录
     * @param start
     * @param regex
     * @return
     */
    public static List <File> loopDirs(String start, final String regex) {
        return loopDirs(new File(start), regex);
    }

    /**
     * 遍历匹配的文件目录
     * @param startDir
     * @param regex
     * @return
     */
    public static List <File> loopDirs(File startDir, final String regex) {
        List <File> result = new ArrayList <>();
        File[] files = startDir.listFiles();
        if (files != null) {
            for (File item : files) {
                if (item.isDirectory()) {
                    if (item.getName().matches(regex)) {
                        result.add(item); //将目录放到dirs集合中
                    }
                    //递归遍历这个子目录，将子目录的files集合、dirs集合，加到其父目录的file\dirs集合中
                    result.addAll(loopDirs(item, regex));
                }
            }
        }
        return result;
    }

}













